package com.hotel.controle;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.hibernate.Session;

import com.hotel.dao.CategoriaDAO;
import com.hotel.dao.QuartoDAO;
import com.hotel.entidade.Categoria;
import com.hotel.entidade.Quarto;
import com.hotel.util.HibernateUtil;

@ManagedBean(name = "quartoBean")
@SessionScoped
public class QuartoControle {

	private Session session;
	private QuartoDAO quartoDAO;
	private CategoriaDAO categoriaDAO;
	private Quarto quarto;
	private Categoria categoria;
	private String categoriaId;
	@SuppressWarnings("rawtypes")
	private DataModel listaQuartos;
	private String keyword = "";
	

	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public QuartoDAO getQuartoDAO() {
		return quartoDAO;
	}

	public void setQuartoDAO(QuartoDAO quartoDAO) {
		this.quartoDAO = quartoDAO;
	}

	public CategoriaDAO getCategoriaDAO() {
		return categoriaDAO;
	}

	public void setCategoriaDAO(CategoriaDAO categoriaDAO) {
		this.categoriaDAO = categoriaDAO;
	}

	public String getCategoriaId() {
		return categoriaId;
	}

	public void setCategoriaId(String categoriaId) {
		this.categoriaId = categoriaId;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Quarto getQuarto() {
		return quarto;
	}

	public void setQuarto(Quarto quarto) {
		this.quarto = quarto;
	}

	@SuppressWarnings("rawtypes")
	public DataModel getListaQuartos() {
		if (this.listaQuartos == null) {
			listarQuartos();
		}
		return listaQuartos;
	}
	
	public String getKeyword() {
		return keyword;
	}

	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}

	public void listarQuartos() {
		session = HibernateUtil.configureSessionFactory().openSession();
		quartoDAO = new QuartoDAO(session);
		List<Quarto> lista = quartoDAO.listaTodos();
		listaQuartos = new ListDataModel<Quarto>(lista);
	}

	public String preparaInserirQuarto() {
		quarto = new Quarto();
		categoria = new Categoria();
		return "/quartos/inserirQuarto";
	}

	public String inserirQuarto() {
		session = HibernateUtil.configureSessionFactory().openSession();
		categoriaDAO = new CategoriaDAO(session);
		try {
			setCategoria((categoriaDAO.buscaPorId(Integer.parseInt(getCategoriaId()))));
			quarto.setCategoria(categoria);
			quartoDAO = new QuartoDAO(session);
			quartoDAO.insere(quarto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		listarQuartos();
		return "/quartos/buscaQuarto";
	}

	public String preparaAlterarQuarto() {
		quarto = (Quarto) (listaQuartos.getRowData());
		return "/quartos/alterarQuarto";
	}

	public String alterarQuarto() {
		categoriaDAO = new CategoriaDAO(session);
		quartoDAO = new QuartoDAO(session);
		try{
			setCategoria((categoriaDAO.buscaPorId(Integer.parseInt(getCategoriaId()))));
			quarto.setCategoria(categoria);
			quartoDAO.atualisa(quarto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "/quartos/buscaQuarto";
	}

	public String excluirQuarto() {
		Quarto quarto = (Quarto) (listaQuartos.getRowData());
		quartoDAO = new QuartoDAO(session);
		try{
			quartoDAO.deleta(quarto);
		} catch(Exception e){
			e.printStackTrace();
		}
		listarQuartos();
		return "/quartos/buscaQuarto";
	}

	public String buscarQuarto() {
		session = HibernateUtil.configureSessionFactory().openSession();
		quartoDAO = new QuartoDAO(session);
		List<Quarto> lista = quartoDAO.pesquisarQuarto(this.getKeyword());
		listaQuartos = new ListDataModel<Quarto>(lista);
		this.keyword = null;
		return "/quartos/buscaQuarto";
	}
	
}
